package org.example.user.statistic.dto;

import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.converters.AutoConverter;
import com.alibaba.excel.converters.string.StringStringConverter;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.example.commons.enums.HealthStatusEnum;
import org.example.commons.enums.PassResultEnum;
import org.example.commons.enums.PassStatusEnum;
import org.example.commons.utils.EnumUtil;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Objects;

import static org.example.commons.constant.Constants.SIMPLE_DATE_FORMAT;

/**
 * 扫描记录的传输展示对象
 *
 * @author bothin
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@ColumnWidth(15)
public class SysHealthRecordDTO {
    @ExcelProperty("记录编号")
    private Long recordId;
    /**
     * 住户id
     */
    @ExcelIgnore
    private Long userId;
    /**
     * 住户名字
     */
    @ExcelProperty("住户")
    private String userName;
    /**
     * 记录管理员id
     */
    @ExcelIgnore
    private Long adminId;
    /**
     * 记录管理员名字
     */
    @ExcelProperty("检查员")
    private String adminName;
    /**
     * 扫码方式（0离开，1进入）
     */
    @ExcelProperty("扫码方式（0离开，1进入）")
    private Integer passStatus;
    /**
     * 是否允许出入（0允许，1拒绝）
     */
    @ExcelProperty("是否允许出入（0允许，1拒绝）")
    private Integer passResult;
    /**
     * 体温
     */
    @ExcelProperty("体温")
    private Float temperature;
    /**
     * 状态（0健康，1异常，2确诊）
     */
    @ExcelProperty("状态（0健康，1异常，2确诊）")
    private Integer healthStatus;
    /**
     * 记录地点
     */
    @ExcelProperty("记录地点")
    @ColumnWidth(25)
    private String recordAddress;
    /**
     * 行程描述
     */
    @ExcelProperty("行程描述")
    @ColumnWidth(30)
    private String tripDesc;
    /**
     * 备注
     */
    @ExcelProperty("备注")
    @ColumnWidth(30)
    private String remarks;
    /**
     * 记录时间
     */
    @ExcelProperty(value = "记录时间",converter = StringStringConverter.class)
    private Date recordTime;

    public String getPassStatusMeaning(){
        PassStatusEnum e = EnumUtil.getByCode(passStatus, PassStatusEnum.class);
        return e==null?"":e.getMeaning();
    }

    public String getPassResultMeaning(){
        PassResultEnum e = EnumUtil.getByCode(passResult, PassResultEnum.class);
        return e==null?"":e.getMeaning();
    }

    public String getHealthStatusMeaning(){
        HealthStatusEnum e = EnumUtil.getByCode(healthStatus, HealthStatusEnum.class);
        return e==null?"":e.getMeaning();
    }

    public String getRecordTime() {
        if (recordTime!=null)
            return SIMPLE_DATE_FORMAT.format(recordTime);
        else
            return "";
    }
}
